void main(){

//调用方法传参

//1. 定义一个方法 求1到这个数的所有数的和

int sumNum(int n){

var num=0;

for(int i=0;i<=n;i++){

num+=i;

}

return num;

}

//调用方法

var n=sumNum(5);

print(n);//15

var n2=sumNum(100);

print(n2);//5050


//2.定义一个方法然后打印用户信息

String printUserInfo(String username,int age){//行参

return "姓名：$username------年龄：$age"; 

}

//调用方法
print(printUserInfo("张三", 20));//实参  姓名：张三------年龄：20


//3.定义一个带可选参数的方法
String printUserInfo2(String username,[int? age]){//行参

if(age!=null)
{
return "姓名：$username------年龄：$age"; 

}else{

return "姓名：$username------年龄：保密"; 
  
}


}

//调用方法
print(printUserInfo2("张三", 20));//实参  姓名：张三------年龄：20

print(printUserInfo2("张三"));//实参  姓名：张三------年龄：保密


//4.定义一个带默认参数的方法
String printUserInfo3(String username,[String sex="男",int? age]){//行参

if(age!=null)
{
return "姓名：$username------性别：$sex----年龄：$age"; 

}else{

return "姓名：$username------性别：$sex----年龄：保密"; 
  
}


}

//调用方法

print(printUserInfo3("张三","女",30));//实参  姓名：张三------性别：女----年龄：30

print(printUserInfo3("张三"));//实参  姓名：张三------性别：男----年龄：保密


//5.定义一个命名参数的方法
String printUserInfo4(String username,{int? age,String sex="男"}){//行参

if(age!=null)
{
return "姓名：$username------性别：$sex----年龄：$age"; 

}else{

return "姓名：$username------性别：$sex----年龄：保密"; 
  
}


}

//调用方法

print(printUserInfo4("张三",age: 20,sex: "男"));//实参  姓名：张三------性别：男----年龄：20


//6.实现一个把方法当做参数的方法


//方法1
fn1(){

print("fn1");

}

//方法2
fn2(fn){

fn();

}

//调用fn2 这个方法 把fn1这个方法当做参数传入
fn2(fn1);


}